﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FacadeInterface;
using FacadeImplemention;
using EntityLayer;

namespace pryCallCenter.RegistrarPedido
{
    public partial class frmRegistrarPedido : System.Web.UI.Page
    {
        clsIFacadeActualizarPedido InterfaceActualizarPedido = new clsFacadeActualizarPedido();
        private static List<strDetalle> ListaDetalle = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    ListaDetalle = new List<strDetalle>();
                    txtNPedido.Text = InterfaceActualizarPedido.TraerUltimoIDPedido();
                    dtpFecha.Date = DateTime.Now.Date;
                }

                LlenardgvClientes();
                LlenardgvProducto();
            }
            catch (Exception ex)
            {
                //throw ex;
            }
        }

        private void LlenardgvClientes()
        {
            dgvClientes.DataSource = InterfaceActualizarPedido.ListarClientePersona();
            dgvClientes.DataBind();
        }

        private void LlenardgvProducto()
        {
            dgvProducto.DataSource = InterfaceActualizarPedido.ListarProducto();
            dgvProducto.DataBind();
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                int ID = Convert.ToInt32(dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "CodigoPersona").ToString());
                String NOM = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Nombres").ToString();
                String APEPA = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "ApellidoPaterno").ToString();
                String APEMA = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "ApellidoMaterno").ToString();
                String TELF = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Telefono") == null ? "" : dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Telefono").ToString();
                String DIR = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Direccion") == null ? "" : dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Direccion").ToString();
                String CUENTA = dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Cliente.CuentaBancaria") == null ? "" : dgvClientes.GetRowValues(dgvClientes.FocusedRowIndex, "Cliente.CuentaBancaria").ToString();

                txtCliente.Text = ID + " : " + APEPA + " " + APEMA + ", " + NOM;
                txtTelefono.Text = TELF;
                txtDireccion.Text = DIR;
                txtNCuenta.Text = CUENTA;
            }
            catch (Exception ex)
            {
                //Response.Write(ex.Message);
            }
        }

        protected void btnInsertar_Click(object sender, EventArgs e)
        {
            ListaDetalle.Add(new strDetalle());
            dgvDetalle.DataSource = ListaDetalle;
            dgvDetalle.DataBind();
        }
        
        public void EliminarItem()
        {
            try
            {
                if (dgvProducto.FocusedRowIndex >= 0)
                {
                    int Index = dgvDetalle.FocusedRowIndex;
                    ListaDetalle.RemoveAt(Index);
                    dgvDetalle.DataSource = ListaDetalle;
                    dgvDetalle.DataBind();

                    txtTotalPrecio.Text = CalcularTotal().ToString("#,###,##0.00");
                }
            }
            catch (Exception ex) { }
        }

        protected void btnAceptarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtPenalidad.Text.Trim() != "" && txtCantidad.Text.Trim() != "")
                {
                    int Index = dgvDetalle.FocusedRowIndex;
                    int IndexProd = dgvProducto.FocusedRowIndex;
                    strDetalle Item = ListaDetalle[Index];
                    Item.Codigo = dgvProducto.GetRowValues(IndexProd, "CodigoProducto").ToString();
                    Item.Descripcion = dgvProducto.GetRowValues(IndexProd, "Descripcion").ToString();                    
                    Item.Penalidad = Convert.ToInt32(txtPenalidad.Text.Trim());
                    Item.Cantidad = Convert.ToInt32(txtCantidad.Text.Trim());
                    Item.Precio = Convert.ToDecimal(dgvProducto.GetRowValues(IndexProd, "PrecioVenta").ToString());
                    Item.PrecioTotal = Item.Precio * Item.Cantidad;
                    ListaDetalle[Index] = Item;

                    dgvDetalle.DataSource = ListaDetalle;
                    dgvDetalle.DataBind();

                    txtCantidad.Text = "0";
                    txtPenalidad.Text = "0";
                    txtTotalPrecio.Text = CalcularTotal().ToString("#,###,##0.00");
                    //ScriptManager.RegisterStartupScript(this, GetType(), "script", "pcBuscarProducto.Hide();", true);                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private Decimal CalcularTotal()
        {
            Decimal Count = 0;
            foreach (strDetalle Item in ListaDetalle)
            {
                Count += Item.PrecioTotal;
            }
            return Count;
        }

        public void GrabarPedido()
        {
            try
            {
                Boolean insert = false;

                Documento objDocumento = new Documento();
                objDocumento.Empresa = 1;
                objDocumento.Cliente = Convert.ToInt32((txtCliente.Text.Trim().Split(':').ToList()[0].ToString().Trim()));
                objDocumento.NumeroDocumento = txtNPedido.Text.Trim();
                objDocumento.TipoDocumento = "P";

                //objDocumento. = txtNIF.Text.Trim();
                //objDocumento. = txtTelefono.Text.Trim();
                //objDocumento. = txtCorreo.Text.Trim();
                //objDocumento. = txtDireccion.Text.Trim();
                //objDocumento. = txtNCuenta.Text.Trim();
                objDocumento.TitularLinea = txtTitular.Text.Trim();
                objDocumento.TelefonoaPortar = txtNTelefonico.Text.Trim();
                objDocumento.CodigoOperador = cboOperador.Text.Trim();
                objDocumento.DireccionInstalacion = txtDirInstalacion.Text.Trim();
                objDocumento.HorarioInstalacion = cboHorario.Text.Trim();

                objDocumento.FechaDocumento = dtpFecha.Date;
                objDocumento.MontoTotal = CalcularTotal();
                //objDocumento.Estado = "A";
                objDocumento.FechaRegistro = dtpFecha.Date;

                if (InterfaceActualizarPedido.GrabarPedido(objDocumento))
                {
                    //Grabar detalle
                    int i = 0;
                    foreach (strDetalle Item in ListaDetalle)
                    {
                        DocumentoDetalle obj = new DocumentoDetalle();
                        obj.Empresa = 1;
                        obj.TipoDocumento = "P";
                        obj.NumeroDocumento = txtNPedido.Text.Trim();

                        obj.Secuencia = ++i;
                        obj.CodigoProducto = Item.Codigo;
                        obj.Penalizacion = Item.Penalidad;
                        obj.Cantidad = Item.Cantidad;
                        obj.PrecioUnitario = Item.Precio;
                        obj.Importe = Item.PrecioTotal;

                        if (InterfaceActualizarPedido.GrabarPedidoDetalle(obj))
                            insert = true;
                        else
                        {
                            insert = false;
                            break;
                        }

                    }
                    
                }

                if (insert == true)
                {
                    lblMensaje.Text = "Se grabó el pedido correctamente.";
                    ScriptManager.RegisterStartupScript(this, GetType(), "script", "pcMensaje.Show();", true);
                }
                else
                {
                    lblMensaje.Text = "Se produjo un error al grabar.";
                    ScriptManager.RegisterStartupScript(this, GetType(), "script", "pcMensaje.Show();", true);
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, GetType(), "script", "pcMensaje.Show();", true);
            }
        }

        protected void btnOK_Click(object sender, EventArgs e)
        {
            GrabarPedido();
        }

        protected void btnOKEliminar_Click(object sender, EventArgs e)
        {
            EliminarItem();
        }

        public struct strDetalle
        {
            public String Codigo { get; set; }
            public String Descripcion { get; set; }
            public int Cantidad { get; set; }
            public Decimal Penalidad { get; set; }
            public Decimal Precio { get; set; }
            public Decimal PrecioTotal { get; set; }
        }
    }
}